package com.whfc.ms.api.quality.service;

import com.whfc.common.result.ListData;
import com.whfc.fuum.dto.SysUserDTO;
import com.whfc.fuum.entity.SysUser;
import com.whfc.quality.dto.*;
import com.whfc.quality.param.QualityCheckLogParam;
import com.whfc.quality.param.QualityCheckParam;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;
import java.util.List;

/**
 * @ClasssName MsQualityCheckServiceImpl
 * @Description 质量管理问题上报接口类
 * @Author hw
 * @Date 2020/8/3 10:55
 * @Version 1.0
 */
public interface MsQualityCheckService {

    /**
     * 获取质量问题上报列表
     *
     * @param deptId    组织机构ID
     * @param type      1-我上报的全部问题2-查询我需要处理的问题
     * @param state     状态   10-待整改 20-待复查 30-待核验 100-已完成 11,12-不合格
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param partId    检查部位ID 手动录入为 -1
     * @param urgency   紧急程度 1-一般  2-紧急
     * @param overdue   是否超期  0-未超期  1-超期
     * @param userId    用户id
     * @return
     * @author hw
     * @date 2020/8/3 11:00
     **/
    QualityCheckListDTO getCheckList(Integer deptId, Integer[] type, Integer[] state, Date startTime, Date endTime,
                                     Integer partId, Integer urgency, Integer overdue, Integer userId, Integer pageNum, Integer pageSize);

    /**
     * 获取质量问题上报详情
     *
     * @param deptId 组织机构ID
     * @return
     * @author hw
     * @date 2020/8/3 14:28
     **/
    QualityCheckDescDTO desc(Integer deptId);

    /**
     * 问题上报
     *
     * @param checkParam 问题上报请求类
     * @param user       用户信息
     * @return
     * @author hw
     * @date 2020/8/3 14:45
     **/
    void add(QualityCheckParam checkParam, SysUser user);

    /**
     * 删除问题
     *
     * @param checkId 问题记录ID
     */
    void del(Integer checkId);

    /**
     * 查询人员信息
     *
     * @param deptId 组织机构ID
     * @return
     * @author hw
     * @date 2020/8/3 15:13
     **/
    List<SysUserDTO> sysUserList(Integer deptId);

    /**
     * 问题处理流程
     *
     * @param qualityCheckLogParam 问题处理流程请求类
     * @return
     * @author hw
     * @date 2020/8/3 15:17
     **/
    void addLog(QualityCheckLogParam qualityCheckLogParam);

    /**
     * 统计分析
     *
     * @param deptId    组织机构ID
     * @param userId
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     * @author hw
     * @date 2020/8/4 8:58
     **/
    QualityCheckStatisticalDTO statistics(Integer deptId, Integer userId, Date startTime, Date endTime);


    /**
     * 统计分析
     *
     * @param deptId  组织机构ID
     * @param userId
     * @param dayTime 时间
     * @return
     * @author hw
     * @date 2020/8/4 8:58
     **/
    QualityCheckStatisticalDTO statisticsDay(Integer deptId, Integer userId, Date dayTime);

    /**
     * 统计分析
     *
     * @param deptId    组织机构ID
     * @param userId
     * @param monthTime 时间
     * @return
     * @author hw
     * @date 2020/8/4 8:58
     **/
    QualityCheckStatisticalDTO statisticsMonth(Integer deptId, Integer userId, Date monthTime);

    /**
     * 图片上传
     *
     * @param file 文件
     * @return
     * @author hw
     * @date 2020/8/4 16:23
     **/
    String uploadImg(MultipartFile file);

    /**
     * 质量日志
     *
     * @param deptId
     * @param date
     * @return
     */
    QualityLogDTO qualityLog(Integer deptId, Date date);


    /**
     * 质量问题上报导出
     *
     * @param qualityIds
     * @param deptId
     */
    void export(String qualityIds, Integer deptId);

    /**
     * 检查统计
     *
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    QualityCheckScreenDTO qualityCheckScreenStatistical(Integer deptId, Date startTime, Date endTime);

    /**
     * 上报问题类别分析
     *
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    QualityCheckScreenDTO qualityCheckTypeAnalysis(Integer deptId, Date startTime, Date endTime);

    /**
     * 未销问题分析
     *
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    QualityCheckUnfinishedDTO qualityCheckUnfinished(Integer deptId, Date startTime, Date endTime);

    /**
     * 上报问题部位分析
     *
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    ListData<QualityCheckPartStatisticalDTO> qualityCheckPartAnalysis(Integer deptId, Date startTime, Date endTime);


    void deleteBatch(List<Integer> idList);
}
